Program debugging is done in one of the following two ways. According to a first approach, a debugger is used, a debugger being a tool that enables a partial execution of the program, stopping at predefined points such as lines of code or variable values. A second way is log-based debugging, wherein print statements are added to the program. When a test is executed a log is created. This log is examined off-line by the programmer to look for places where the behavior of the program deviates from the expected behavior. There also exist debugging tools that display traces of executions and show what happens during the execution. Once the location of a problem is found using these tools, other tools such as a debugger are used to debug the program. It is not possible, after identifying the location of the problem, to return to the actual program to investigate the state of the program. Getting to the correct location using a debugger can be a difficult problem, because algorithmic debugging, i.e. locating a bug, is difficult once a fault occurs. Algorithmic debugging is used to support locating a defect once a fault is found, as described in web site “Generalized algorithmic debugging and testing” by Peter Fritzson et al. appearing in “ACM Letters on programming languages and testing”, 1:303-322, 1992.
There are many existing debugging tools and there are several trace visualization tools available, but there are no tools that combine the use of debugging commands and trace control together.